<?php
namespace Amis\form;
class Transfer extends FormItem
{
    public string $type = 'transfer';

    public function options($options)
    {
        $this->options = $options;
        return $this;
    }

    public function source($api)
    {
        $this->source = $api;
        return $this;
    }

    /**
     * @param bool $delimiter
     * @return $this
     */
    public function delimiter(bool $delimiter = false)
    {
        $this->delimiter = $delimiter;
        return $this;
    }

    public function joinValues(bool $joinValues = true)
    {
        $this->joinValues = $joinValues;
        return $this;
    }

    public function extractValue(bool $extractValue = false)
    {
        $this->extractValue = $extractValue;
        return $this;
    }

    /**
     * 当设置为 true 时表示可以通过输入部分内容检索出选项。
     * @param bool $searchable
     * @return $this
     */
    public function searchable(bool $searchable = false)
    {
        $this->searchable = $searchable;
        return $this;
    }

    /**
     * 如果想通过接口检索，可以设置个 api。
     * @param string $searchApi
     * @return $this
     */
    public function searchApi(string $searchApi)
    {
        $this->searchApi = $searchApi;
        return $this;
    }

    /**
     * 是否显示统计数据
     * @param bool $statistics
     * @return $this
     */
    public function statistics(bool $statistics = true)
    {
        $this->statistics = $statistics;
        return $this;
    }

    public function selectTitle(string $selectTitle = '请选择')
    {
        $this->selectTitle = $selectTitle;
        return $this;
    }

    public function resultTitle(string $resultTitle = '当前选择')
    {
        $this->resultTitle = $resultTitle;
        return $this;
    }

    public function sortable(bool $sortable = true)
    {
        $this->sortable = $sortable;
        return $this;
    }

    /**
     * 可选：list、table、tree、chained、associated。分别为：列表形式、表格形式、树形选择形式、级联选择形式，关
     * 联选择形式（与级联选择的区别在于，级联是无限极，而关联只有一级，关联左边可以是个 tree）。
     * @param string $selectMode
     * @return $this
     */
    public function selectMode(string $selectMode = 'list')
    {
        if (in_array($selectMode, ['list', 'table', 'tree', 'chained', 'associated'])) {
            $this->selectMode = $selectMode;
        }
        return $this;
    }

    public function searchResultMode(string $searchResultMode)
    {
        $this->searchResultMode = $searchResultMode;
        return $this;
    }

    /**
     * 当展示形式为 table 可以用来配置展示哪些列，跟 table 中的 columns 配置相似，只是只有展示功能。
     * @param string $columns
     * @return $this
     */
    public function columns(array $columns)
    {
        $this->columns = $columns;
        return $this;
    }

    /**
     * 当展示形式为 associated 时用来配置左边的选项集。
     * @param array $leftOptions
     * @return $this
     */
    public function leftOptions(array $leftOptions)
    {
        $this->leftOptions = $leftOptions;
        return $this;
    }

    /**
     * 当展示形式为 associated 时用来配置左边的选择形式，支持 list 或者 tree。默认为 list。
     * @param string $leftMode
     * @return $this
     */
    public function leftMode(string $leftMode)
    {
        $this->leftMode = $leftMode;
        return $this;
    }

    /**
     * 当展示形式为 associated 时用来配置右边的选择形式，可选：list、table、tree、chained。
     * @param string $rightMode
     * @return $this
     */
    public function rightMode(string $rightMode)
    {
        $this->rightMode = $rightMode;
        return $this;
    }

    /**
     * 用来自定义选项展示
     * @param string $menuTpl
     * @return $this
     */
    public function menuTpl(string $menuTpl)
    {
        $this->menuTpl = $menuTpl;
        return $this;
    }

    /**
     * 用来自定义值的展示
     * @param string $valueTpl
     * @return $this
     */
    public function valueTpl(string $valueTpl)
    {
        $this->valueTpl = $valueTpl;
        return $this;
    }
}